home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Shareware Grab Bag
/
Shareware Grab Bag.iso
/
090
/
newmake.arc
/
FILE.C
< prev
next >
Wrap
Text File
|
1986-09-21
|
3KB
|
142 lines
#include <stdio.h>
#include "make.h"
/*
* Return file-node for 'fname'.
* If it doesn't exist, then create one.
*/
FILENODE *filenode(fname)
char *fname;
{
FILENODE *f, *afnode(), *gfile();
if((f = gfile(fname)) == NULL)
f = afnode(fname);
return f;
}
/*
* Add a dependency to the node 'fnd'.
* 'fnd' will depend on 'fname'.
*/
addfile(fnd, fname)
FILENODE *fnd;
char *fname;
{
NODE *n;
FILENODE *f;
if(fnd == NULL) /* punt if no root file */
{
fprintf(stderr, "No current root, can't add dependency '%s'\n",
fname);
return;
}
f = filenode(fname);
if((n = (NODE *)malloc(sizeof(NODE))) == NULL) allerr();
n->nnext = fnd->fnode;
fnd->fnode = n;
n->nfile = f;
}
/*
* Add a line of method-text to the node 'fnode'.
*/
addmeth(fnode, methtext)
FILENODE *fnode;
char *methtext;
{
int len;
char *new;
if(fnode == NULL || methtext == NULL) return;
len = strlen(methtext) + 2;
if(fnode->fmake == NULL)
{
if((fnode->fmake = (char *)malloc(1)) == NULL) allerr();
*(fnode->fmake) = 0;
}
len += strlen(fnode->fmake);
/* Lattice C doesn't have 'realloc()', so this kludges around it: */
if((new = (char *)malloc(len)) == NULL) allerr();
strcpy(new, fnode->fmake);
free(fnode->fmake);
fnode->fmake = new;
strcat(fnode->fmake, methtext);
len = strlen(fnode->fmake);
if(len && fnode->fmake[len - 1] != '\n')
strcat(fnode->fmake, "\n");
}
/*
* Get a filenode for the file called 'fn'.
* Returns NULL if the node doesn't exist.
*/
FILENODE *gfile(fn)
char *fn;
{
FILENODE *f;
for(f = froot; f != NULL; f = f->fnext)
if(!strcmp(fn, f->fname)) return f;
return NULL;
}
/*
* Alloc space for a new file node.
*/
FILENODE *afnode(name)
char *name;
{
FILENODE *f;
for(f=froot; f; f=f->fnext)
if(!strcmp(name, f->fname)) return f;
if((f = (FILENODE *)malloc(sizeof(FILENODE))) == NULL) allerr();
if((f->fname = (char *)malloc(strlen(name)+1)) == NULL) allerr();
strcpy(f->fname, name);
f->fmake = NULL;
f->fnode = NULL;
f->fdate = NULL;
f->fflag = 0;
f->fnext = froot;
froot = f;
return f;
}
/*
* Print dependency tree.
*/
prtree()
{
FILENODE *f;
NODE *n;
for(f = froot; f != NULL; f = f->fnext)
{
printf("%s%s%s (%u, %u)\n",
f->fname,
(f->fflag & ROOTP) ? " (root)" : "",
(f->fflag & REBUILT) ? " (rebuilt)" : "",
(f->fdate != NULL) ? (f->fdate)->ds_high : 0,
(f->fdate != NULL) ? (f->fdate)->ds_low : 0);
if(f->fmake != NULL)
printf("%s", f->fmake);
for(n = f->fnode; n != NULL; n = n->nnext)
printf("\t%s\n", (n->nfile)->fname);
puts("");
}
}